package com.fjl;

import com.fjl.service.TestService;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/*
模板  责任连  装饰
在Spring中，后置处理器通常用于在Bean的创建过程中插入自定义逻辑。这些处理器充当了Spring IoC容器的拦截器，允许在Bean被实例化、初始化或销毁时执行自定义逻辑。

模板方法模式允许在一个方法中定义算法的框架，而将一些步骤的具体实现延迟到子类中。在Spring中，后置处理器通过实现特定的接口（如BeanPostProcessor接口）来定义一组钩子方法，其中的方法在容器生命周期中的不同阶段被调用。开发者可以创建自定义后置处理器并实现这些方法来插入自己的逻辑，而不需要改变Spring容器本身的代码。

Spring的后置处理器（post-processors）是属于设计模式中的责任链模式（Chain of Responsibility Pattern）或装饰者模式（Decorator Pattern）的一种实现。

责任链模式允许你将请求沿着处理链传递，每个处理器可以选择处理请求或将其传递给链中的下一个处理器。在Spring中，后置处理器就像责任链中的一环，它们可以在Spring容器中的Bean创建过程中插入自定义逻辑。

装饰者模式允许你动态地给对象添加额外的功能。在Spring中，后置处理器可以在Bean实例化或初始化的过程中，动态地添加功能或修改Bean的行为，这就像给Bean添加装饰一样。
 */
public class TestPostProcesser {
	public static void main(String[] args) {
		try {
			AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConfigApp.class);
			String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
			// 遍历Spring容器中的beanName
			for (String beanDefinitionName : beanDefinitionNames) {
				System.out.println(beanDefinitionName);
			}
			BeanDefinition beanDefinition = applicationContext.getBeanDefinition("Test1");
			System.out.println(beanDefinition.getDescription());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
